/**
 * 日志工具模块
 * 简单封装console，方便后续扩展为文件日志等
 */

// 日志级别
const LOG_LEVELS = {
  DEBUG: 0,
  INFO: 1,
  WARN: 2,
  ERROR: 3
};

// 当前环境日志级别
const currentLevel = process.env.NODE_ENV === 'production' 
  ? LOG_LEVELS.INFO 
  : LOG_LEVELS.DEBUG;

/**
 * 格式化日志消息
 * @param {string} level 日志级别
 * @param {string} message 日志消息
 * @param {object} data 附加数据
 * @returns {string} 格式化后的日志消息
 */
function formatLog(level, message, data) {
  const timestamp = new Date().toISOString();
  let logMessage = `[${timestamp}] [${level}] ${message}`;
  
  if (data) {
    try {
      // 处理错误对象
      if (data instanceof Error) {
        logMessage += `\n  Stack: ${data.stack || '(no stack)'}`;
      } else {
        // 普通对象数据
        const dataStr = JSON.stringify(data, null, 2);
        if (dataStr !== '{}' && dataStr !== '[]') {
          logMessage += `\n  Data: ${dataStr}`;
        }
      }
    } catch (e) {
      logMessage += `\n  Data: [无法序列化的数据]`;
    }
  }
  
  return logMessage;
}

// 日志工具对象
const logger = {
  /**
   * 调试级别日志
   * @param {string} message 日志消息
   * @param {object} data 附加数据(可选)
   */
  debug(message, data) {
    if (currentLevel <= LOG_LEVELS.DEBUG) {
      console.log(formatLog('DEBUG', message, data));
    }
  },
  
  /**
   * 信息级别日志
   * @param {string} message 日志消息
   * @param {object} data 附加数据(可选)
   */
  info(message, data) {
    if (currentLevel <= LOG_LEVELS.INFO) {
      console.info(formatLog('INFO', message, data));
    }
  },
  
  /**
   * 警告级别日志
   * @param {string} message 日志消息
   * @param {object} data 附加数据(可选)
   */
  warn(message, data) {
    if (currentLevel <= LOG_LEVELS.WARN) {
      console.warn(formatLog('WARN', message, data));
    }
  },
  
  /**
   * 错误级别日志
   * @param {string} message 日志消息
   * @param {object} data 附加数据(可选)
   */
  error(message, data) {
    if (currentLevel <= LOG_LEVELS.ERROR) {
      console.error(formatLog('ERROR', message, data));
    }
  }
};

module.exports = logger; 